// 什么叫函数柯里化？
// 其实就是将使用多个参数的函数转换成一系列使用一个参数的函数的技术。
function curry(fn) {
  let judge = (...args) => {
    if (args.length == fn.length) return fn(...args);
    return (...arg) => judge(...args, ...arg);
  };
  return judge;
}

function curry(func) {
  return function curried(...args) {
    // 如果参数数量足够，直接执行原函数
    if (args.length >= func.length) {
      return func.apply(this, args);
    }

    // 否则返回一个新函数继续收集参数
    return function (...args2) {
      return curried.apply(this, [...args, ...args2]);
    };
  };
}